#include "Persona.h"

// harcodeado mal para prueba

Persona::Persona(){	
}

void Persona::clone(Dato* clon){
     clon = new Persona(this->nombre,this->apellido,this->dni);
}

Persona::Persona(char nombre[], char apellido[],char dni[]){
	strcpy(this->dni, dni);
	strcpy(this->nombre, nombre);
	strcpy(this->apellido, apellido);
	this->tamanioBinario = 30;
	this->tamanioTexto = 30;	
}

unsigned int Persona::getTamanio(TipoSerializacion modo){
	return 30;
}

int Persona::compareTo(Dato *datoAComparar){
	Persona *p = (Persona*) datoAComparar;
	return strcmp(dni,p->dni);
}

int Persona::compareToWith(Dato *datoAComparar, char** camposAComparar, int cantCamposAComparar){
	return 0;
}

void Persona::serialize(void **datoSerializado, TipoSerializacion modo){
	*datoSerializado = malloc(this->tamanioBinario);
	char *pos;
	pos = (char*) *datoSerializado;
	memmove(pos,this->dni,LONGDNI);
	pos = (char*) *datoSerializado + LONGDNI;
	memmove(pos,this->nombre,MAX);
	pos = (char*) *datoSerializado + LONGDNI + MAX;
	memmove(pos,this->apellido,MAX);
	
}

void Persona::unserialize(void *datoADeserializar, TipoSerializacion modo){
	char *pos;
	pos = (char*) datoADeserializar;
	memmove(this->dni,pos,LONGDNI);
	pos = (char*) datoADeserializar + LONGDNI;
	memmove(this->nombre,pos,MAX);
	pos = (char*) datoADeserializar + LONGDNI + MAX;
	memmove(this->apellido,pos,MAX);
	return;
}

void Persona::print(){
	printf("%s %s %s",this->dni, this->nombre, this->apellido);
}
